
package entrega;
import java.io.*;
/**
 * Programa en el que se introduce un código de 7 números y su respectiva letra, 
 * se contabilizan las repeticiones así como los códigos correctos, y se muestra 
 * su porcentaje respecto al total de repeticiones
 * El programa finaliza al intoducir un 0
 *    Autor:Fernando Ortega Gonzalez
 */

public class ejer1 
{
    public static void main(String[] args)throws IOException
    {
        int codigo;
        char letra;
        char confirmar;
        float correctos=0;
        float introducidos=0;
        float porcentaje;
        boolean cero=true;
            do
            {//do
                try
                {
                    codigo=pedirNumero("Introduzca su código personal\t");
               
                if(codigo!=0)
                {//Si no es 0 la primera vez
                   cero=false;
                   int cod=codigo;
                   int suma=0;
                   while(cod!=0)
                   {//mientras no meta un 0 sumo los digitos.
                       suma=suma+(cod%10);
                       cod=cod/10;
                   }//mientras no meta un 0 sumo los digitos.
                   letra=(char)((suma%26)+65);
                   System.out.println("El codigo ascii es:\t"+letra);
                   confirmar=pedirLetra("Introduzca la letra de su código\t");
                   if(confirmar!=letra)
                   {//si no introduce la letra correcta
                       System.out.println("ERROR La letra es incorrecta");
                       introducidos++;
                   }//si no introduce la letra correcta
                   else
                   {//si introduce la letra correcta
                      System.out.println("Código Correcto"); 
                      correctos++;
                      introducidos++;
                   }//si introduce la letra correcta
                }//Si no es 0 la primera vez
                }
                catch(NumberFormatException es)
                {
                    System.out.println("No ha introducido un número");
                    codigo=pedirNumero("Introduzca su código personal\t");
                }
                
            }while(codigo!=0);//mientras NO sea 0
        if(cero)
        {//Si es 0 la primera vez
            System.out.println("No ha introducido números correctos") ;
            System.out.println("Final del programa");
        }//Si es 0 la primera vez
        else
        {//Si no es 0 la primera vez
            porcentaje=(correctos/introducidos)*100;
            System.out.println("Has introducido "+introducidos+" codigos");
            System.out.println("Has introducido "+correctos+" codigos correctos");
            System.out.println("El porcentaje de códigos correctos es: "+porcentaje+"%");
        }//Si no es 0 la primera vez
    }
    /**
     * Metodo que recibe un mensaje y devuelve un número entero
     * @param mensaje
     * @return numero
     * @throws IOException 
     */
    public static int pedirNumero(String mensaje)throws IOException
    {//pedirNumero
        int numero;
        InputStreamReader flujo=new InputStreamReader(System.in);
        BufferedReader teclado=new BufferedReader(flujo);
        System.out.print(mensaje);//Mensaje desde codigo
        numero=Integer.parseInt(teclado.readLine());
        if(numero!=0)
            {    
                while(numero<1000000 || numero>9999999)
                {//que tenga 7 digitos
                System.out.println("ERROR\tIntroduce un código de 7 dígitos");
                System.out.print("Introduzca su código de nuevo\t");
                numero=Integer.parseInt(teclado.readLine());
                }//que tenga 7 digitos
            }
        return numero;//Devuelve el numero
    }//pedirNumero
    /**
     * Metodo que recibe un mensaje y devuelve un caracter
     * @param mensaje
     * @return letra
     * @throws IOException 
     */
     public static char pedirLetra(String mensaje)throws IOException
    {//pedirLetra
        char letra;
        InputStreamReader flujo=new InputStreamReader(System.in);
        BufferedReader teclado=new BufferedReader(flujo);
        System.out.print(mensaje);
        letra=(char)teclado.read();
        letra=Character.toUpperCase(letra);
        while(letra<'A'|| letra>'Z')
        {//mientras no esté entre A y Z
            teclado.readLine();
            System.out.println("Fuera de rango, introducza una nueva letra");
            letra=(char)teclado.read();
            letra=Character.toUpperCase(letra);  
        }//mientras no esté entre A y Z
        teclado.readLine();
        return letra;//Devuelve la letra
    }//pedirLetra
}
